# -.- coding: utf-8 -.-

from django.db import models
from django.contrib.auth.models import User

GENERO_ELECCION = (
    ('H', 'Hembra'),
    ('M', 'Macho'),
)


# Create your models here.
class Jugador(models.Model):
    jugador = models.ForeignKey(User, primary_key=True)
    #campo que si esta a False, impide que el jugador pueda ser llamado a participar en partidas
    #util cuando el jugador no quiere que lo asalten a mensajes de participacion
    participativo = models.BooleanField(default=True)
    #descripcion = models.CharField(max_lenght=200)
    
    def __unicode__(self):
        return u'%s' % (self.jugador.username)

#esta inclusion debe hacerse aqui, no puede hacerse al principio porque se produce una
#dependencia cruzada con partidas que impide la creacion de ninguna de las dos aplicaciones
from partidas.models import Partida

class Raza(models.Model):
    nombre = models.CharField(max_length=40)
    descrip = models.CharField(max_length=400)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)
    
class Categoria(models.Model):
    nombre = models.CharField(max_length=40)
    #NOTA: HACE FALTA METER COMO CAMPOS DE LA CATEGORIA TODOS LOS ATRIBUTOS QUE
    #SE MODIFICAN POR ESTA, POR EJEMPLO: SI SUMA ATAQUE, O CUESTAN MENOS LAS
    #HABILIDADES ATLETICAS, ETC...
    #tambien se me esta ocurriendo que ciertos campos (A NIVEL LOGICO) dependan
    #de la categoria de la que es un personaje para determinar su valor
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class TipoArmadura(models.Model):
    nombre = models.CharField(max_length=40)
    fil = models.IntegerField(null=True)
    con = models.IntegerField(null=True)
    pen = models.IntegerField(null=True)
    cal = models.IntegerField(null=True)
    ele = models.IntegerField(null=True)
    fri = models.IntegerField(null=True)
    ene = models.IntegerField(null=True)
    localizacion = models.CharField(max_length=50)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)
    
class Armadura(models.Model):
    nombre = models.CharField(max_length=40)
    ent = models.IntegerField(null=True)
    pres = models.IntegerField(null=True)
    esp = models.IntegerField(null=True)
    req = models.IntegerField(null=True)
    tipo = models.ForeignKey(TipoArmadura)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class Nivel(models.Model):
    nivel = models.IntegerField(null=True)
    pdesarrollo = models.IntegerField(null=True)
    exp_sig_nvl = models.IntegerField(null=True)
    presencia_base = models.IntegerField(null=True)
    plus_carac_nvl = models.IntegerField(null=True)

    def __unicode__(self):
        return u'%s' % (str(self.nivel))


class Tamano(models.Model):
    min = models.IntegerField(null=True)
    max = models.IntegerField(null=True)
    aspecto = models.CharField(max_length=30)
    atq_fis = models.IntegerField(null=True)
    arma_nat = models.IntegerField(null=True)
    turno_base = models.IntegerField(null=True)
    area = models.IntegerField(null=True)
    tipo_mov = models.IntegerField(null=True)
    mult_acum = models.IntegerField(null=True)
    armadura = models.IntegerField(null=True)

    def __unicode__(self):
        return u'%s - %s' % (str(self.min),str(self.max))


class VentajasFijas(models.Model):
    nombre = models.CharField(max_length=50, null=True)
    descripcion = models.TextField(null=True)
    coste = models.IntegerField(null=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class VentajasDependientes(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=50, null=True)
    descripcion = models.TextField(null=True)
    coste = models.IntegerField(null=True)

    class Meta:
        unique_together=[['propietario','nombre']]

    def __unicode__(self):
        return u'%s' % (self.nombre)

class DesventajasFijas(models.Model):
    nombre = models.CharField(max_length=50, null=True)
    descripcion = models.TextField(null=True)
    coste = models.IntegerField(null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class DesventajasDependientes(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=50, null=True)
    descripcion = models.TextField(null=True)
    coste = models.IntegerField(null=True)

    class Meta:
        unique_together=[['propietario','nombre']]

    def __unicode__(self):
        return u'%s' % (self.nombre)

class HabilidadesSecundariasDependientes(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=50, null=True)
    descripcion = models.TextField(null=True)
    coste = models.IntegerField(null=True, blank=True)
    base = models.IntegerField(null=True, blank=True)
    bono = models.IntegerField(null=True, blank=True)
    espe = models.IntegerField(null=True, blank=True)
    cate = models.IntegerField(null=True, blank=True)
    final = models.IntegerField(null=True, blank=True)

    class Meta:
        unique_together=[['propietario','nombre']]

    def __unicode__(self):
        return u'%s' % (self.nombre)


    #DUDA: EL TIPO DE ARMADURA ESTA REGLADO O ES VARIABLE??
    #EN CASO DE QUE SEA REGLADO, PUEDE HABER UN CAMPO EN ARMADURA DE TIPO
    #FOREIGNKEY QUE AGREGE CADA TIPO DE ARMADURA Y LOS VALORES QUE DA

class Criticos(models.Model):
    nombre = models.CharField(max_length=40)
    descrip = models.CharField(max_length=400)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class Arma(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    esp = models.IntegerField(null=True, blank=True)
    ataque = models.IntegerField(null=True, blank=True)
    defensa = models.IntegerField(null=True, blank=True)
    danio_base = models.IntegerField(null=True, blank=True)
    b_fuerza = models.IntegerField(null=True, blank=True)
    danio_final = models.IntegerField(null=True, blank=True)
    especial = models.IntegerField(null=True, blank=True)
    velocidad = models.IntegerField(null=True, blank=True)
    entereza = models.IntegerField(null=True, blank=True)
    rotura = models.IntegerField(null=True, blank=True)
    presencia = models.IntegerField(null=True, blank=True)
    critico1 = models.ForeignKey(Criticos, null=True, related_name = 'critico1')
    critico2 = models.ForeignKey(Criticos, null=True, related_name = 'critico2')

    def __unicode__(self):
        return u'%s' % (self.nombre)

class DisciplinasPsiquicas(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class HabilidadesPsiquicas(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    bon = models.IntegerField(null=True, blank=True)
    dif = models.IntegerField(null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class HabilidadesKi(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    coste = models.IntegerField(null=True, blank=True)
    dependencia = models.ForeignKey('self', null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class HabilidadesEspeciales(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)
    coste = models.IntegerField(null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class Tablas(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)
    coste = models.IntegerField(null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class EfectosFijos(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)
    cm = models.IntegerField(null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)    

class EfectosDependientes(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)
    cm = models.IntegerField(null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)    

class TecnicasFijas(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    #descripcion = models.TextField(null=True)
    #cm = models.IntegerField(null=True, blank=True)
    efectos = models.ManyToManyField(EfectosFijos, null=True, blank=True)
    nivel = models.IntegerField(null=True, blank=True)
    acum_fue = models.IntegerField(null=True, blank=True)
    acum_agi = models.IntegerField(null=True, blank=True)
    acum_des = models.IntegerField(null=True, blank=True)
    acum_con = models.IntegerField(null=True, blank=True)
    acum_pod = models.IntegerField(null=True, blank=True)
    acum_vol = models.IntegerField(null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class TecnicasDependientes(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    #descripcion = models.TextField(null=True)
    #cm = models.IntegerField(null=True, blank=True)
    efectos = models.ManyToManyField(EfectosDependientes, null=True, blank=True)
    nivel = models.IntegerField(null=True, blank=True)
    acum_fue = models.IntegerField(null=True, blank=True)
    acum_agi = models.IntegerField(null=True, blank=True)
    acum_des = models.IntegerField(null=True, blank=True)
    acum_con = models.IntegerField(null=True, blank=True)
    acum_pod = models.IntegerField(null=True, blank=True)
    acum_vol = models.IntegerField(null=True, blank=True)
    
    def __unicode__(self):
        return u'%s' % (self.nombre)

class ArtesMarciales(models.Model):
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class EquipoCombate(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)
    localizacion = models.CharField(max_length=80, null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class EquipoVestimenta(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class EquipoPosesiones(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class EquipoVariado(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class EquipoObjEsp(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class Contactos(models.Model):
    propietario = models.ForeignKey(Jugador)
    nombre = models.CharField(max_length=80, null=True)
    descripcion = models.TextField(null=True)

    def __unicode__(self):
        return u'%s' % (self.nombre)

class Notas(models.Model):
    propietario = models.ForeignKey(Jugador)
    breve = models.CharField(max_length=80, null=True)
    nota = models.TextField(null=True)

    def __unicode__(self):
        return u'%s' % (self.breve)



class FichaAnima(models.Model):
#    id = models.AutoField(primary_key=True)
    
    #NOTA: TODOS LOS CAMPOS LOS PONGO INICIALMENTE QUE PUEDEN SER NULOS Y BLANCOS, PERO LUEGO SE VA
    #CAMBIANDO ESTO CONFORME SE DESARROLLE LA LOGICA Y SOBRE TODO LOS FORMULARIOS AL RESPECTO
    #copiar en FichaAnimaSinValidar desde este campo hacia abajo
    partida = models.ForeignKey(Partida, null=True)
    propietario = models.ForeignKey(Jugador)
#    propietario = models.ForeignKey(Jugador, primary_key=True)
    
    #datos que conforman el formulario inicial de creacion de un personaje
#    personaje = models.CharField(max_length=80)
    personaje = models.CharField(max_length=80)#
    
    pelo = models.CharField(max_length=30, blank=True)#
    ojos = models.CharField(max_length=30, blank=True)#
    edad = models.IntegerField(null=True, blank=True)#
    sexo = models.CharField(max_length=1, choices=GENERO_ELECCION)#
    altura = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
    peso = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
    
    #resto de la tablita "Jugador" de la ficha "Anima v1.0"
    #FORMULARIO: PASO1
    categoria = models.ForeignKey(Categoria, null=True, blank=True)
    nivel = models.ForeignKey(Nivel, null=True, blank=True)
    raza = models.ForeignKey(Raza, null=True, blank=True)
    nephilim = models.BooleanField(blank=True)
    etnia = models.CharField(max_length=30, blank=True)
    #pdesarrollo = models.IntegerField(null=True, blank=True)
    apariencia = models.IntegerField(null=True, blank=True)
    natura = models.IntegerField(null=True, blank=True)
    gnosis = models.IntegerField(null=True, blank=True)
    tamano = models.IntegerField(null=True, blank=True)
    exp_actual = models.IntegerField(null=True, blank=True)
    
    #TURNO
    turno_movbase_base = models.IntegerField(null=True, blank=True)
    turno_movbase_esp1 = models.IntegerField(null=True, blank=True)
    turno_movbase_esp2 = models.IntegerField(null=True, blank=True)
    turno_movbase_esp3 = models.IntegerField(null=True, blank=True)
    turno_movbase_esp4 = models.IntegerField(null=True, blank=True)
    turno_armadura_base = models.IntegerField(null=True, blank=True)
    turno_armadura_esp1 = models.IntegerField(null=True, blank=True)
    turno_armadura_esp2 = models.IntegerField(null=True, blank=True)
    turno_armadura_esp3 = models.IntegerField(null=True, blank=True)
    turno_armadura_esp4 = models.IntegerField(null=True, blank=True)
    #Nota para vistas o formularios: campos que se autorrellenan segun agilidad
    turno_agilidad_base = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp1 = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp2 = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp3 = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp4 = models.IntegerField(null=True, blank=True)
    #Nota para vistas o formularios: campos que se autorrellenan segun destreza
    turno_destreza_base = models.IntegerField(null=True, blank=True)
    turno_destreza_esp1 = models.IntegerField(null=True, blank=True)
    turno_destreza_esp2 = models.IntegerField(null=True, blank=True)
    turno_destreza_esp3 = models.IntegerField(null=True, blank=True)
    turno_destreza_esp4 = models.IntegerField(null=True, blank=True)
    turno_arma_base = models.IntegerField(null=True, blank=True)
    turno_arma_esp1 = models.IntegerField(null=True, blank=True)
    turno_arma_esp2 = models.IntegerField(null=True, blank=True)
    turno_arma_esp3 = models.IntegerField(null=True, blank=True)
    turno_arma_esp4 = models.IntegerField(null=True, blank=True)
    turno_categoria_base = models.IntegerField(null=True, blank=True)
    turno_categoria_esp1 = models.IntegerField(null=True, blank=True)
    turno_categoria_esp2 = models.IntegerField(null=True, blank=True)
    turno_categoria_esp3 = models.IntegerField(null=True, blank=True)
    turno_categoria_esp4 = models.IntegerField(null=True, blank=True)
    turno_especial_base = models.IntegerField(null=True, blank=True)
    turno_especial_esp1 = models.IntegerField(null=True, blank=True)
    turno_especial_esp2 = models.IntegerField(null=True, blank=True)
    turno_especial_esp3 = models.IntegerField(null=True, blank=True)
    turno_especial_esp4 = models.IntegerField(null=True, blank=True)
    turno_final_base = models.IntegerField(null=True, blank=True)
    turno_final_esp1 = models.IntegerField(null=True, blank=True)
    turno_final_esp2 = models.IntegerField(null=True, blank=True)
    turno_final_esp3 = models.IntegerField(null=True, blank=True)
    turno_final_esp4 = models.IntegerField(null=True, blank=True)
    
    #PUNTOS DE VIDA
    vida_nummultiplos = models.IntegerField(null=True, blank=True)
    vida_base = models.IntegerField(null=True, blank=True)
    vida_categoria = models.IntegerField(null=True, blank=True)
    vida_multiplos = models.IntegerField(null=True, blank=True)
    vida_final = models.IntegerField(null=True, blank=True)
    vida_actual = models.IntegerField(null=True, blank=True)
    
    #CARACTERISTICAS PRINCIPALES
    agi_base = models.IntegerField(default=0, blank=True)
    agi_actual = models.IntegerField(default=0, blank=True)
    agi_plus = models.IntegerField(default=0, blank=True)
    agi_bono = models.IntegerField(default=0, blank=True)
    con_base = models.IntegerField(default=0, blank=True)
    con_actual = models.IntegerField(default=0, blank=True)
    con_plus = models.IntegerField(default=0, blank=True)
    con_bono = models.IntegerField(default=0, blank=True)
    des_base = models.IntegerField(default=0, blank=True)
    des_actual = models.IntegerField(default=0, blank=True)
    des_plus = models.IntegerField(default=0, blank=True)
    des_bono = models.IntegerField(default=0, blank=True)
    fue_base = models.IntegerField(default=0, blank=True)
    fue_actual = models.IntegerField(default=0, blank=True)
    fue_plus = models.IntegerField(default=0, blank=True)
    fue_bono = models.IntegerField(default=0, blank=True)
    int_base = models.IntegerField(default=0, blank=True)
    int_actual = models.IntegerField(default=0, blank=True)
    int_plus = models.IntegerField(default=0, blank=True)
    int_bono = models.IntegerField(default=0, blank=True)
    per_base = models.IntegerField(default=0, blank=True)
    per_actual = models.IntegerField(default=0, blank=True)
    per_plus = models.IntegerField(default=0, blank=True)
    per_bono = models.IntegerField(default=0, blank=True)
    pod_base = models.IntegerField(default=0, blank=True)
    pod_actual = models.IntegerField(default=0, blank=True)
    pod_plus = models.IntegerField(default=0, blank=True)
    pod_bono = models.IntegerField(default=0, blank=True)
    vol_base = models.IntegerField(default=0, blank=True)
    vol_actual = models.IntegerField(default=0, blank=True)
    vol_plus = models.IntegerField(default=0, blank=True)
    vol_bono = models.IntegerField(default=0, blank=True)

    #CAPACIDAD FISICA
    cansancio_base = models.IntegerField(null=True, blank=True)
    cansancio_espec = models.IntegerField(null=True, blank=True)
    cansancio_actual = models.IntegerField(null=True, blank=True)
    
    #MOVIMIENTO
    movimiento_base = models.IntegerField(null=True, blank=True)
    movimiento_pen = models.IntegerField(null=True, blank=True)
    movimiento_bon = models.IntegerField(null=True, blank=True)
    movimiento_final = models.IntegerField(null=True, blank=True)
    movimiento_turno = models.IntegerField(null=True, blank=True)
    
    #LLEVAR ARMADURA
    llevarmadura_coste = models.IntegerField(null=True, blank=True)
    llevarmadura_base = models.IntegerField(null=True, blank=True)
    llevarmadura_bfuerza = models.IntegerField(null=True, blank=True)
    llevarmadura_esp = models.IntegerField(null=True, blank=True)
    llevarmadura_final = models.IntegerField(null=True, blank=True)
    
    #ARMADURA
    armadura_pieza1 = models.ForeignKey(Armadura, related_name='armad1', null=True)
    armadura_pieza2 = models.ForeignKey(Armadura, related_name='armad2', null=True)
    armadura_pieza3 = models.ForeignKey(Armadura, related_name='armad3', null=True)
    armadura_final_fil = models.IntegerField(null=True, blank=True)
    armadura_final_con = models.IntegerField(null=True, blank=True)
    armadura_final_pen = models.IntegerField(null=True, blank=True)
    armadura_final_cal = models.IntegerField(null=True, blank=True)
    armadura_final_ele = models.IntegerField(null=True, blank=True)
    armadura_final_fri = models.IntegerField(null=True, blank=True)
    armadura_final_ene = models.IntegerField(null=True, blank=True)
    
    #VENTAJAS Y DESVENTAJAS
    ventajas = models.ManyToManyField(VentajasFijas, null=True, blank=True)
    desventajas = models.ManyToManyField(DesventajasFijas, null=True, blank=True)
    ventajas_prop = models.ManyToManyField(VentajasDependientes, null=True, blank=True)
    desventajas_prop = models.ManyToManyField(DesventajasDependientes, null=True, blank=True)
    
    #HABILIDADES SECUNDARIAS
    #atleticas
    coste_atleticas = models.IntegerField(null=True, blank=True)
    coste_acrobacias = models.IntegerField(null=True, blank=True)
    acrobacias_base = models.IntegerField(null=True, blank=True)
    acrobacias_bono = models.IntegerField(null=True, blank=True)
    acrobacias_espe = models.IntegerField(null=True, blank=True)
    acrobacias_cate = models.IntegerField(null=True, blank=True)
    acrobacias_final = models.IntegerField(null=True, blank=True)
    coste_atletismo = models.IntegerField(null=True, blank=True)
    atletismo_base = models.IntegerField(null=True, blank=True)
    atletismo_bono = models.IntegerField(null=True, blank=True)
    atletismo_espe = models.IntegerField(null=True, blank=True)
    atletismo_cate = models.IntegerField(null=True, blank=True)
    atletismo_final = models.IntegerField(null=True, blank=True)
    coste_montar = models.IntegerField(null=True, blank=True)
    montar_base = models.IntegerField(null=True, blank=True)
    montar_bono = models.IntegerField(null=True, blank=True)
    montar_espe = models.IntegerField(null=True, blank=True)
    montar_cate = models.IntegerField(null=True, blank=True)
    montar_final = models.IntegerField(null=True, blank=True)
    coste_nadar = models.IntegerField(null=True, blank=True)
    nadar_base = models.IntegerField(null=True, blank=True)
    nadar_bono = models.IntegerField(null=True, blank=True)
    nadar_espe = models.IntegerField(null=True, blank=True)
    nadar_cate = models.IntegerField(null=True, blank=True)
    nadar_final = models.IntegerField(null=True, blank=True)
    coste_trepar = models.IntegerField(null=True, blank=True)
    trepar_base = models.IntegerField(null=True, blank=True)
    trepar_bono = models.IntegerField(null=True, blank=True)
    trepar_espe = models.IntegerField(null=True, blank=True)
    trepar_cate = models.IntegerField(null=True, blank=True)
    trepar_final = models.IntegerField(null=True, blank=True)
    coste_saltar = models.IntegerField(null=True, blank=True)
    saltar_base = models.IntegerField(null=True, blank=True)
    saltar_bono = models.IntegerField(null=True, blank=True)
    saltar_espe = models.IntegerField(null=True, blank=True)
    saltar_cate = models.IntegerField(null=True, blank=True)
    saltar_final = models.IntegerField(null=True, blank=True)
    #vigor
    coste_vigor = models.IntegerField(null=True, blank=True)
    coste_frialdad = models.IntegerField(null=True, blank=True)
    frialdad_base = models.IntegerField(null=True, blank=True)
    frialdad_bono = models.IntegerField(null=True, blank=True)
    frialdad_espe = models.IntegerField(null=True, blank=True)
    frialdad_cate = models.IntegerField(null=True, blank=True)
    frialdad_final = models.IntegerField(null=True, blank=True)
    coste_pfuerza = models.IntegerField(null=True, blank=True)
    pfuerza_base = models.IntegerField(null=True, blank=True)
    pfuerza_bono = models.IntegerField(null=True, blank=True)
    pfuerza_espe = models.IntegerField(null=True, blank=True)
    pfuerza_cate = models.IntegerField(null=True, blank=True)
    pfuerza_final = models.IntegerField(null=True, blank=True)
    coste_resdolor = models.IntegerField(null=True, blank=True)
    resdolor_base = models.IntegerField(null=True, blank=True)
    resdolor_bono = models.IntegerField(null=True, blank=True)
    resdolor_espe = models.IntegerField(null=True, blank=True)
    resdolor_cate = models.IntegerField(null=True, blank=True)
    resdolor_final = models.IntegerField(null=True, blank=True)
    #perceptivas
    coste_perceptivas = models.IntegerField(null=True, blank=True)
    coste_advertir = models.IntegerField(null=True, blank=True)
    advertir_base = models.IntegerField(null=True, blank=True)
    advertir_bono = models.IntegerField(null=True, blank=True)
    advertir_espe = models.IntegerField(null=True, blank=True)
    advertir_cate = models.IntegerField(null=True, blank=True)
    advertir_final = models.IntegerField(null=True, blank=True)
    coste_buscar = models.IntegerField(null=True, blank=True)
    buscar_base = models.IntegerField(null=True, blank=True)
    buscar_bono = models.IntegerField(null=True, blank=True)
    buscar_espe = models.IntegerField(null=True, blank=True)
    buscar_cate = models.IntegerField(null=True, blank=True)
    buscar_final = models.IntegerField(null=True, blank=True)
    coste_rastrear = models.IntegerField(null=True, blank=True)
    rastrear_base = models.IntegerField(null=True, blank=True)
    rastrear_bono = models.IntegerField(null=True, blank=True)
    rastrear_espe = models.IntegerField(null=True, blank=True)
    rastrear_cate = models.IntegerField(null=True, blank=True)
    rastrear_final = models.IntegerField(null=True, blank=True)
    #intelectuales
    coste_intelectuales = models.IntegerField(null=True, blank=True)
    coste_animales = models.IntegerField(null=True, blank=True)
    animales_base = models.IntegerField(null=True, blank=True)
    animales_bono = models.IntegerField(null=True, blank=True)
    animales_espe = models.IntegerField(null=True, blank=True)
    animales_cate = models.IntegerField(null=True, blank=True)
    animales_final = models.IntegerField(null=True, blank=True)
    coste_ciencia = models.IntegerField(null=True, blank=True)
    ciencia_base = models.IntegerField(null=True, blank=True)
    ciencia_bono = models.IntegerField(null=True, blank=True)
    ciencia_espe = models.IntegerField(null=True, blank=True)
    ciencia_cate = models.IntegerField(null=True, blank=True)
    ciencia_final = models.IntegerField(null=True, blank=True)
    coste_herbolaria = models.IntegerField(null=True, blank=True)
    herbolaria_base = models.IntegerField(null=True, blank=True)
    herbolaria_bono = models.IntegerField(null=True, blank=True)
    herbolaria_espe = models.IntegerField(null=True, blank=True)
    herbolaria_cate = models.IntegerField(null=True, blank=True)
    herbolaria_final = models.IntegerField(null=True, blank=True)
    coste_historia= models.IntegerField(null=True, blank=True)
    historia_base = models.IntegerField(null=True, blank=True)
    historia_bono = models.IntegerField(null=True, blank=True)
    historia_espe = models.IntegerField(null=True, blank=True)
    historia_cate = models.IntegerField(null=True, blank=True)
    historia_final = models.IntegerField(null=True, blank=True)
    coste_medicina = models.IntegerField(null=True, blank=True)
    medicina_base = models.IntegerField(null=True, blank=True)
    medicina_bono = models.IntegerField(null=True, blank=True)
    medicina_espe = models.IntegerField(null=True, blank=True)
    medicina_cate = models.IntegerField(null=True, blank=True)
    medicina_final = models.IntegerField(null=True, blank=True)
    coste_memorizar = models.IntegerField(null=True, blank=True)
    memorizar_base = models.IntegerField(null=True, blank=True)
    memorizar_bono = models.IntegerField(null=True, blank=True)
    memorizar_espe = models.IntegerField(null=True, blank=True)
    memorizar_cate = models.IntegerField(null=True, blank=True)
    memorizar_final = models.IntegerField(null=True, blank=True)
    coste_navegacion = models.IntegerField(null=True, blank=True)
    navegacion_base = models.IntegerField(null=True, blank=True)
    navegacion_bono = models.IntegerField(null=True, blank=True)
    navegacion_espe = models.IntegerField(null=True, blank=True)
    navegacion_cate = models.IntegerField(null=True, blank=True)
    navegacion_final = models.IntegerField(null=True, blank=True)
    coste_ocultismo = models.IntegerField(null=True, blank=True)
    ocultismo_base = models.IntegerField(null=True, blank=True)
    ocultismo_bono = models.IntegerField(null=True, blank=True)
    ocultismo_espe = models.IntegerField(null=True, blank=True)
    ocultismo_cate = models.IntegerField(null=True, blank=True)
    ocultismo_final = models.IntegerField(null=True, blank=True)
    coste_tasacion = models.IntegerField(null=True, blank=True)
    tasacion_base = models.IntegerField(null=True, blank=True)
    tasacion_bono = models.IntegerField(null=True, blank=True)
    tasacion_espe = models.IntegerField(null=True, blank=True)
    tasacion_cate = models.IntegerField(null=True, blank=True)
    tasacion_final = models.IntegerField(null=True, blank=True)
    coste_vmagica = models.IntegerField(null=True, blank=True)
    vmagica_base = models.IntegerField(null=True, blank=True)
    vmagica_bono = models.IntegerField(null=True, blank=True)
    vmagica_espe = models.IntegerField(null=True, blank=True)
    vmagica_cate = models.IntegerField(null=True, blank=True)
    vmagica_final = models.IntegerField(null=True, blank=True)
    #sociales
    coste_sociales = models.IntegerField(null=True, blank=True)
    coste_estilo = models.IntegerField(null=True, blank=True)
    estilo_base = models.IntegerField(null=True, blank=True)
    estilo_bono = models.IntegerField(null=True, blank=True)
    estilo_espe = models.IntegerField(null=True, blank=True)
    estilo_cate = models.IntegerField(null=True, blank=True)
    estilo_final = models.IntegerField(null=True, blank=True)
    coste_intimidar = models.IntegerField(null=True, blank=True)
    intimidar_base = models.IntegerField(null=True, blank=True)
    intimidar_bono = models.IntegerField(null=True, blank=True)
    intimidar_espe = models.IntegerField(null=True, blank=True)
    intimidar_cate = models.IntegerField(null=True, blank=True)
    intimidar_final = models.IntegerField(null=True, blank=True)
    coste_liderazgo = models.IntegerField(null=True, blank=True)
    liderazgo_base = models.IntegerField(null=True, blank=True)
    liderazgo_bono = models.IntegerField(null=True, blank=True)
    liderazgo_espe = models.IntegerField(null=True, blank=True)
    liderazgo_cate = models.IntegerField(null=True, blank=True)
    liderazgo_final = models.IntegerField(null=True, blank=True)
    coste_persuasion = models.IntegerField(null=True, blank=True)
    persuasion_base = models.IntegerField(null=True, blank=True)
    persuasion_bono = models.IntegerField(null=True, blank=True)
    persuasion_espe = models.IntegerField(null=True, blank=True)
    persuasion_cate = models.IntegerField(null=True, blank=True)
    persuasion_final = models.IntegerField(null=True, blank=True)
    #subterfugio
    coste_subterfugio = models.IntegerField(null=True, blank=True)
    coste_cerrajeria = models.IntegerField(null=True, blank=True)
    cerrajeria_base = models.IntegerField(null=True, blank=True)
    cerrajeria_bono = models.IntegerField(null=True, blank=True)
    cerrajeria_espe = models.IntegerField(null=True, blank=True)
    cerrajeria_cate = models.IntegerField(null=True, blank=True)
    cerrajeria_final = models.IntegerField(null=True, blank=True)
    coste_disfraz = models.IntegerField(null=True, blank=True)
    disfraz_base = models.IntegerField(null=True, blank=True)
    disfraz_bono = models.IntegerField(null=True, blank=True)
    disfraz_espe = models.IntegerField(null=True, blank=True)
    disfraz_cate = models.IntegerField(null=True, blank=True)
    disfraz_final = models.IntegerField(null=True, blank=True)
    coste_ocultarse = models.IntegerField(null=True, blank=True)
    ocultarse_base = models.IntegerField(null=True, blank=True)
    ocultarse_bono = models.IntegerField(null=True, blank=True)
    ocultarse_espe = models.IntegerField(null=True, blank=True)
    ocultarse_cate = models.IntegerField(null=True, blank=True)
    ocultarse_final = models.IntegerField(null=True, blank=True)
    coste_robo = models.IntegerField(null=True, blank=True)
    robo_base = models.IntegerField(null=True, blank=True)
    robo_bono = models.IntegerField(null=True, blank=True)
    robo_espe = models.IntegerField(null=True, blank=True)
    robo_cate = models.IntegerField(null=True, blank=True)
    robo_final = models.IntegerField(null=True, blank=True)
    coste_sigilo = models.IntegerField(null=True, blank=True)
    sigilo_base = models.IntegerField(null=True, blank=True)
    sigilo_bono = models.IntegerField(null=True, blank=True)
    sigilo_espe = models.IntegerField(null=True, blank=True)
    sigilo_cate = models.IntegerField(null=True, blank=True)
    sigilo_final = models.IntegerField(null=True, blank=True)
    coste_tramperia = models.IntegerField(null=True, blank=True)
    tramperia_base = models.IntegerField(null=True, blank=True)
    tramperia_bono = models.IntegerField(null=True, blank=True)
    tramperia_espe = models.IntegerField(null=True, blank=True)
    tramperia_cate = models.IntegerField(null=True, blank=True)
    tramperia_final = models.IntegerField(null=True, blank=True)
    coste_venenos = models.IntegerField(null=True, blank=True)
    venenos_base = models.IntegerField(null=True, blank=True)
    venenos_bono = models.IntegerField(null=True, blank=True)
    venenos_espe = models.IntegerField(null=True, blank=True)
    venenos_cate = models.IntegerField(null=True, blank=True)
    venenos_final = models.IntegerField(null=True, blank=True)
    #creativas
    coste_creativas = models.IntegerField(null=True, blank=True)
    coste_arte = models.IntegerField(null=True, blank=True)
    arte_base = models.IntegerField(null=True, blank=True)
    arte_bono = models.IntegerField(null=True, blank=True)
    arte_espe = models.IntegerField(null=True, blank=True)
    arte_cate = models.IntegerField(null=True, blank=True)
    arte_final = models.IntegerField(null=True, blank=True)
    coste_baile = models.IntegerField(null=True, blank=True)
    baile_base = models.IntegerField(null=True, blank=True)
    baile_bono = models.IntegerField(null=True, blank=True)
    baile_espe = models.IntegerField(null=True, blank=True)
    baile_cate = models.IntegerField(null=True, blank=True)
    baile_final = models.IntegerField(null=True, blank=True)
    coste_forja = models.IntegerField(null=True, blank=True)
    forja_base = models.IntegerField(null=True, blank=True)
    forja_bono = models.IntegerField(null=True, blank=True)
    forja_espe = models.IntegerField(null=True, blank=True)
    forja_cate = models.IntegerField(null=True, blank=True)
    forja_final = models.IntegerField(null=True, blank=True)
    coste_musica = models.IntegerField(null=True, blank=True)
    musica_base = models.IntegerField(null=True, blank=True)
    musica_bono = models.IntegerField(null=True, blank=True)
    musica_espe = models.IntegerField(null=True, blank=True)
    musica_cate = models.IntegerField(null=True, blank=True)
    musica_final = models.IntegerField(null=True, blank=True)
    coste_tmanos = models.IntegerField(null=True, blank=True)
    tmanos_base = models.IntegerField(null=True, blank=True)
    tmanos_bono = models.IntegerField(null=True, blank=True)
    tmanos_espe = models.IntegerField(null=True, blank=True)
    tmanos_cate = models.IntegerField(null=True, blank=True)
    tmanos_final = models.IntegerField(null=True, blank=True)
    #especial (hacer algo parecido a lo de las ventajas y desventajas propias)
    #coste_especiales = models.IntegerField(null=True, blank=True)      #Considero q no hace falta este parametro, puesto q se le puede asignar un coste a cada una al ser especiales
    especiales = models.ManyToManyField(HabilidadesSecundariasDependientes, null=True, blank=True)

    #COMBATE
    ataque_coste = models.IntegerField(null=True, blank=True)
    ataque_base = models.IntegerField(null=True, blank=True)
    ataque_destreza = models.IntegerField(null=True, blank=True)
    ataque_categoria = models.IntegerField(null=True, blank=True)
    ataque_final = models.IntegerField(null=True, blank=True)
    
    defensa_coste = models.IntegerField(null=True, blank=True)
    defensa_base = models.IntegerField(null=True, blank=True)
    defensa_destreza = models.IntegerField(null=True, blank=True)
    defensa_categoria = models.IntegerField(null=True, blank=True)
    defensa_final = models.IntegerField(null=True, blank=True)
    
    #ESQUIVA
    esquiva_coste = models.IntegerField(null=True, blank=True)
    esquiva_base = models.IntegerField(null=True, blank=True)
    esquiva_bono_agi = models.IntegerField(null=True, blank=True)
    esquiva_especial = models.IntegerField(null=True, blank=True)
    esquiva_categoria = models.IntegerField(null=True, blank=True)
    esquiva_final = models.IntegerField(null=True, blank=True)
    
    #ARMA
    # Para hacer que cada usuario disponga de una lista de armas para cada personaje en concreto
    #crearemos una tabla "armasYpjs" con una DOBLE clave primaria: "ficha-arma", donde
    #"arma" es una clave externa de la tabla Armas y esta tabla define la posibilidad de q cada
    #usuario se pueda añadir un numero variable de armas!! ^^ OLEEEEE!!
    #CORRECCION: no parece ser tan wena idea...por lo tanto, proseguire con los manytomany por ahora
    armas = models.ManyToManyField(Arma, null=True, blank=True)
    
    #ACUMULACION MAGICA
    acumag_coste = models.IntegerField(null=True, blank=True)
    acumag_act_base = models.IntegerField(null=True, blank=True)
    acumag_multiplos = models.IntegerField(null=True, blank=True)
    acumag_especial = models.IntegerField(null=True, blank=True)
    acumag_act_real = models.IntegerField(null=True, blank=True)
    
    #ZEON
    zeon_coste = models.IntegerField(null=True, blank=True)
    zeon_base = models.IntegerField(null=True, blank=True)
    zeon_categoria = models.IntegerField(null=True, blank=True)
    zeon_especial = models.IntegerField(null=True, blank=True)
    zeon_final = models.IntegerField(null=True, blank=True)
    
    #PROYECCION MAGICA
    proyecmag_coste = models.IntegerField(null=True, blank=True)
    proyecmag_base = models.IntegerField(null=True, blank=True)
    proyecmag_bdes = models.IntegerField(null=True, blank=True)
    proyecmag_especial = models.IntegerField(null=True, blank=True)
    proyecmag_final = models.IntegerField(null=True, blank=True)
    
    #DESEQUILIBRIO
    desequilibrio_ofens = models.IntegerField(null=True, blank=True)
    desequilibrio_defen = models.IntegerField(null=True, blank=True)
    desequilibrio_medio = models.IntegerField(null=True, blank=True)
    
    #POTENCIAL PSIQUICO
    potenpsiq_base = models.IntegerField(null=True, blank=True)
    potenpsiq_especial = models.IntegerField(null=True, blank=True)
    potenpsiq_final = models.IntegerField(null=True, blank=True)
    
    #CV
    cv_coste = models.IntegerField(null=True, blank=True)
    cv_base = models.IntegerField(null=True, blank=True)
    cv_libres = models.IntegerField(null=True, blank=True)
    
    #PROYECCION PSIQUICA
    proyecpsiq_coste = models.IntegerField(null=True, blank=True)
    proyecpsiq_base = models.IntegerField(null=True, blank=True)
    proyecpsiq_bdes = models.IntegerField(null=True, blank=True)
    proyecpsiq_especial = models.IntegerField(null=True, blank=True)
    proyecpsiq_final = models.IntegerField(null=True, blank=True)

    #NIVEL DE ESFERA
    esfera_esencia = models.IntegerField(null=True, blank=True)
    esfera_agua = models.IntegerField(null=True, blank=True)
    esfera_tierra = models.IntegerField(null=True, blank=True)
    esfera_creacion = models.IntegerField(null=True, blank=True)
    esfera_oscuridad = models.IntegerField(null=True, blank=True)
    esfera_nigromancia = models.IntegerField(null=True, blank=True)
    esfera_luz = models.IntegerField(null=True, blank=True)
    esfera_destruccion = models.IntegerField(null=True, blank=True)
    esfera_aire = models.IntegerField(null=True, blank=True)
    esfera_fuego = models.IntegerField(null=True, blank=True)
    esfera_ilusion = models.IntegerField(null=True, blank=True)
    
    #DISCIPLINAS PSIQUICAS
    disciplinas_psiquicas = models.ManyToManyField(DisciplinasPsiquicas, null=True, blank=True)
    
    #HABILIDADES PSIQUICAS
    habpsiq = models.ManyToManyField(HabilidadesPsiquicas, null=True, blank=True)
    habpsiq_num_innatos = models.IntegerField(null=True, blank=True)
    
    #USO DEL KI (en la tabla de ki, establecer un campo "dependencia" donde se establezca que campo tiene que tener un valor mayor q cero (si hiciera falta) para que el campo en cuestion pueda tenerse)
    ki_uso = models.ManyToManyField(HabilidadesKi, null=True, blank=True)
    ki_cmarcial = models.IntegerField(null=True, blank=True)
    ki_usado = models.IntegerField(null=True, blank=True)
    
    #acumulaciones de ki a los atributos (?)
    ki_fue_acu = models.IntegerField(null=True, blank=True)
    ki_fue_ki = models.IntegerField(null=True, blank=True)
    ki_fue_actual = models.IntegerField(null=True, blank=True)
    ki_agi_acu = models.IntegerField(null=True, blank=True)
    ki_agi_ki = models.IntegerField(null=True, blank=True)
    ki_agi_actual = models.IntegerField(null=True, blank=True)
    ki_des_acu = models.IntegerField(null=True, blank=True)
    ki_des_ki = models.IntegerField(null=True, blank=True)
    ki_des_actual = models.IntegerField(null=True, blank=True)
    ki_con_acu = models.IntegerField(null=True, blank=True)
    ki_con_ki = models.IntegerField(null=True, blank=True)
    ki_con_actual = models.IntegerField(null=True, blank=True)
    ki_vol_acu = models.IntegerField(null=True, blank=True)
    ki_vol_ki = models.IntegerField(null=True, blank=True)
    ki_vol_actual = models.IntegerField(null=True, blank=True)
    ki_pod_acu = models.IntegerField(null=True, blank=True)
    ki_pod_ki = models.IntegerField(null=True, blank=True)
    ki_pod_actual = models.IntegerField(null=True, blank=True)
    
    #RESISTENCIAS
    res_presenbase_base = models.IntegerField(null=True, blank=True)
    res_presenbase_esp = models.IntegerField(null=True, blank=True)
    res_presenbase_final = models.IntegerField(null=True, blank=True)
    res_fisica_base = models.IntegerField(null=True, blank=True)
    res_fisica_bono = models.IntegerField(null=True, blank=True)
    res_fisica_esp = models.IntegerField(null=True, blank=True)
    res_fisica_final = models.IntegerField(null=True, blank=True)
    res_enfermedades_base = models.IntegerField(null=True, blank=True)
    res_enfermedades_bono = models.IntegerField(null=True, blank=True)
    res_enfermedades_esp = models.IntegerField(null=True, blank=True)
    res_enfermedades_final = models.IntegerField(null=True, blank=True)
    res_venenos_base = models.IntegerField(null=True, blank=True)
    res_venenos_bono = models.IntegerField(null=True, blank=True)
    res_venenos_esp = models.IntegerField(null=True, blank=True)
    res_venenos_final = models.IntegerField(null=True, blank=True)
    res_magicas_base = models.IntegerField(null=True, blank=True)
    res_magicas_bono = models.IntegerField(null=True, blank=True)
    res_magicas_esp = models.IntegerField(null=True, blank=True)
    res_magicas_final = models.IntegerField(null=True, blank=True)
    res_psiquica_base = models.IntegerField(null=True, blank=True)
    res_psiquica_bono = models.IntegerField(null=True, blank=True)
    res_psiquica_esp = models.IntegerField(null=True, blank=True)
    res_psiquica_final = models.IntegerField(null=True, blank=True)
    
    #HABILIDADES ESPECIALES / TABLAS
    habilidades_especiales = models.ManyToManyField(HabilidadesEspeciales, null=True, blank=True)
    tablas = models.ManyToManyField(Tablas, null=True, blank=True)
    
    #TECNICAS
    tecnicasfijas = models.ManyToManyField(TecnicasFijas, null=True, blank=True)
    tecnicasdependientes = models.ManyToManyField(TecnicasDependientes, null=True, blank=True)
    
    #CONVOCACION
    conv_convocar_base = models.IntegerField(null=True, blank=True)
    conv_convocar_bono = models.IntegerField(null=True, blank=True)
    conv_convocar_esp = models.IntegerField(null=True, blank=True)
    conv_convocar_final = models.IntegerField(null=True, blank=True)
    conv_dominacion_base = models.IntegerField(null=True, blank=True)
    conv_dominacion_bono = models.IntegerField(null=True, blank=True)
    conv_dominacion_esp = models.IntegerField(null=True, blank=True)
    conv_dominacion_final = models.IntegerField(null=True, blank=True)
    conv_atadura_base = models.IntegerField(null=True, blank=True)
    conv_atadura_bono = models.IntegerField(null=True, blank=True)
    conv_atadura_esp = models.IntegerField(null=True, blank=True)
    conv_atadura_final = models.IntegerField(null=True, blank=True)
    conv_desconvocar_base = models.IntegerField(null=True, blank=True)
    conv_desconvocar_bono = models.IntegerField(null=True, blank=True)
    conv_desconvocar_esp = models.IntegerField(null=True, blank=True)
    conv_desconvocar_final = models.IntegerField(null=True, blank=True)
    conv_especializacion = models.IntegerField(null=True, blank=True)
    
    #ARTES MARCIALES
    artes_marciales = models.ManyToManyField(ArtesMarciales, null=True, blank=True)
    artmar_cmtotal = models.IntegerField(null=True, blank=True)
    artmar_bataq = models.IntegerField(null=True, blank=True)
    artmar_bdef = models.IntegerField(null=True, blank=True)
    artmar_danio = models.IntegerField(null=True, blank=True)
    
    #EQUIPO
    equipo_combate = models.ManyToManyField(EquipoCombate, null=True, blank=True)
    equipo_vestimenta = models.ManyToManyField(EquipoVestimenta, null=True, blank=True)
    equipo_posesiones = models.ManyToManyField(EquipoPosesiones, null=True, blank=True)
    equipo_variado = models.ManyToManyField(EquipoVariado, null=True, blank=True)
    equipo_objesp = models.ManyToManyField(EquipoObjEsp, null=True, blank=True)
    contactos = models.ManyToManyField(Contactos, null=True, blank=True)
    
    notas = models.ManyToManyField(Notas, null=True, blank=True)
    
    #DINERO
    dinero_oro_coste = models.IntegerField(null=True, blank=True)
    dinero_oro_cantidad = models.IntegerField(null=True, blank=True)
    dinero_plata_coste = models.IntegerField(null=True, blank=True)
    dinero_plata_cantidad = models.IntegerField(null=True, blank=True)
    dinero_bronce_coste = models.IntegerField(null=True, blank=True)
    dinero_bronce_cantidad = models.IntegerField(null=True, blank=True)
    dinero_joyas_coste = models.IntegerField(null=True, blank=True)
    dinero_joyas_cantidad = models.IntegerField(null=True, blank=True)
    dinero_otros_nombre = models.CharField(max_length=40)
    dinero_otros_coste = models.IntegerField(null=True, blank=True)
    dinero_otros_cantidad = models.IntegerField(null=True, blank=True)
    
    #RACIONES DIARIAS
    raciones_comida = models.CharField(max_length=40)
    raciones_bebida = models.CharField(max_length=40)
    raciones_otros = models.CharField(max_length=100)
    
    #PROYECTILES
    proyectiles_flechas = models.CharField(max_length=40)
    proyectiles_saetas = models.CharField(max_length=40)
    proyectiles_dagas = models.CharField(max_length=40)
    
    #TODO: FALTA LA CUARTA PAGINA
    
    
    #def __unicode__(self):
    #    return self.personaje
    
    class Meta:
        unique_together=[['propietario','personaje']]

class FichaAnimaSinValidar(models.Model):
    #asignacion = models.ForeignKey(FichaAnima)
    
    partida = models.ForeignKey(Partida, null=True)
    propietario = models.ForeignKey(Jugador)
#    propietario = models.ForeignKey(Jugador, primary_key=True)
    
    #datos que conforman el formulario inicial de creacion de un personaje
#    personaje = models.CharField(max_length=80)
    personaje = models.CharField(max_length=80)#
    
    pelo = models.CharField(max_length=30, blank=True)#
    ojos = models.CharField(max_length=30, blank=True)#
    edad = models.IntegerField(null=True, blank=True)#
    sexo = models.CharField(max_length=1, choices=GENERO_ELECCION)#
    altura = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
    peso = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
    
    #resto de la tablita "Jugador" de la ficha "Anima v1.0"
    #FORMULARIO: PASO1
    categoria = models.ForeignKey(Categoria, null=True, blank=True)
    nivel = models.ForeignKey(Nivel, null=True, blank=True)
    raza = models.ForeignKey(Raza, null=True, blank=True)
    nephilim = models.BooleanField(blank=True)
    etnia = models.CharField(max_length=30, blank=True)
    #pdesarrollo = models.IntegerField(null=True, blank=True)
    apariencia = models.IntegerField(null=True, blank=True)
    natura = models.IntegerField(null=True, blank=True)
    gnosis = models.IntegerField(null=True, blank=True)
    tamano = models.IntegerField(null=True, blank=True)
    exp_actual = models.IntegerField(null=True, blank=True)
    
    #TURNO
    turno_movbase_base = models.IntegerField(null=True, blank=True)
    turno_movbase_esp1 = models.IntegerField(null=True, blank=True)
    turno_movbase_esp2 = models.IntegerField(null=True, blank=True)
    turno_movbase_esp3 = models.IntegerField(null=True, blank=True)
    turno_movbase_esp4 = models.IntegerField(null=True, blank=True)
    turno_armadura_base = models.IntegerField(null=True, blank=True)
    turno_armadura_esp1 = models.IntegerField(null=True, blank=True)
    turno_armadura_esp2 = models.IntegerField(null=True, blank=True)
    turno_armadura_esp3 = models.IntegerField(null=True, blank=True)
    turno_armadura_esp4 = models.IntegerField(null=True, blank=True)
    #Nota para vistas o formularios: campos que se autorrellenan segun agilidad
    turno_agilidad_base = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp1 = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp2 = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp3 = models.IntegerField(null=True, blank=True)
    turno_agilidad_esp4 = models.IntegerField(null=True, blank=True)
    #Nota para vistas o formularios: campos que se autorrellenan segun destreza
    turno_destreza_base = models.IntegerField(null=True, blank=True)
    turno_destreza_esp1 = models.IntegerField(null=True, blank=True)
    turno_destreza_esp2 = models.IntegerField(null=True, blank=True)
    turno_destreza_esp3 = models.IntegerField(null=True, blank=True)
    turno_destreza_esp4 = models.IntegerField(null=True, blank=True)
    turno_arma_base = models.IntegerField(null=True, blank=True)
    turno_arma_esp1 = models.IntegerField(null=True, blank=True)
    turno_arma_esp2 = models.IntegerField(null=True, blank=True)
    turno_arma_esp3 = models.IntegerField(null=True, blank=True)
    turno_arma_esp4 = models.IntegerField(null=True, blank=True)
    turno_categoria_base = models.IntegerField(null=True, blank=True)
    turno_categoria_esp1 = models.IntegerField(null=True, blank=True)
    turno_categoria_esp2 = models.IntegerField(null=True, blank=True)
    turno_categoria_esp3 = models.IntegerField(null=True, blank=True)
    turno_categoria_esp4 = models.IntegerField(null=True, blank=True)
    turno_especial_base = models.IntegerField(null=True, blank=True)
    turno_especial_esp1 = models.IntegerField(null=True, blank=True)
    turno_especial_esp2 = models.IntegerField(null=True, blank=True)
    turno_especial_esp3 = models.IntegerField(null=True, blank=True)
    turno_especial_esp4 = models.IntegerField(null=True, blank=True)
    turno_final_base = models.IntegerField(null=True, blank=True)
    turno_final_esp1 = models.IntegerField(null=True, blank=True)
    turno_final_esp2 = models.IntegerField(null=True, blank=True)
    turno_final_esp3 = models.IntegerField(null=True, blank=True)
    turno_final_esp4 = models.IntegerField(null=True, blank=True)
    
    #PUNTOS DE VIDA
    vida_nummultiplos = models.IntegerField(null=True, blank=True)
    vida_base = models.IntegerField(null=True, blank=True)
    vida_categoria = models.IntegerField(null=True, blank=True)
    vida_multiplos = models.IntegerField(null=True, blank=True)
    vida_final = models.IntegerField(null=True, blank=True)
    vida_actual = models.IntegerField(null=True, blank=True)
    
    #CARACTERISTICAS PRINCIPALES
    agi_base = models.IntegerField(null=True, blank=True)
    agi_actual = models.IntegerField(null=True, blank=True)
    agi_plus = models.IntegerField(null=True, blank=True)
    agi_bono = models.IntegerField(null=True, blank=True)
    con_base = models.IntegerField(null=True, blank=True)
    con_actual = models.IntegerField(null=True, blank=True)
    con_plus = models.IntegerField(null=True, blank=True)
    con_bono = models.IntegerField(null=True, blank=True)
    des_base = models.IntegerField(null=True, blank=True)
    des_actual = models.IntegerField(null=True, blank=True)
    des_plus = models.IntegerField(null=True, blank=True)
    des_bono = models.IntegerField(null=True, blank=True)
    fue_base = models.IntegerField(null=True, blank=True)
    fue_actual = models.IntegerField(null=True, blank=True)
    fue_plus = models.IntegerField(null=True, blank=True)
    fue_bono = models.IntegerField(null=True, blank=True)
    int_base = models.IntegerField(null=True, blank=True)
    int_actual = models.IntegerField(null=True, blank=True)
    int_plus = models.IntegerField(null=True, blank=True)
    int_bono = models.IntegerField(null=True, blank=True)
    per_base = models.IntegerField(null=True, blank=True)
    per_actual = models.IntegerField(null=True, blank=True)
    per_plus = models.IntegerField(null=True, blank=True)
    per_bono = models.IntegerField(null=True, blank=True)
    pod_base = models.IntegerField(null=True, blank=True)
    pod_actual = models.IntegerField(null=True, blank=True)
    pod_plus = models.IntegerField(null=True, blank=True)
    pod_bono = models.IntegerField(null=True, blank=True)
    vol_base = models.IntegerField(null=True, blank=True)
    vol_actual = models.IntegerField(null=True, blank=True)
    vol_plus = models.IntegerField(null=True, blank=True)
    vol_bono = models.IntegerField(null=True, blank=True)

    #CAPACIDAD FISICA
    cansancio_base = models.IntegerField(null=True, blank=True)
    cansancio_espec = models.IntegerField(null=True, blank=True)
    cansancio_actual = models.IntegerField(null=True, blank=True)
    
    #MOVIMIENTO
    movimiento_base = models.IntegerField(null=True, blank=True)
    movimiento_pen = models.IntegerField(null=True, blank=True)
    movimiento_bon = models.IntegerField(null=True, blank=True)
    movimiento_final = models.IntegerField(null=True, blank=True)
    movimiento_turno = models.IntegerField(null=True, blank=True)
    
    #LLEVAR ARMADURA
    llevarmadura_coste = models.IntegerField(null=True, blank=True)
    llevarmadura_base = models.IntegerField(null=True, blank=True)
    llevarmadura_bfuerza = models.IntegerField(null=True, blank=True)
    llevarmadura_esp = models.IntegerField(null=True, blank=True)
    llevarmadura_final = models.IntegerField(null=True, blank=True)
    
    #ARMADURA
    armadura_pieza1 = models.ForeignKey(Armadura, related_name='fsvarmad1', null=True)
    armadura_pieza2 = models.ForeignKey(Armadura, related_name='fsvarmad2', null=True)
    armadura_pieza3 = models.ForeignKey(Armadura, related_name='fsvarmad3', null=True)
    armadura_final_fil = models.IntegerField(null=True, blank=True)
    armadura_final_con = models.IntegerField(null=True, blank=True)
    armadura_final_pen = models.IntegerField(null=True, blank=True)
    armadura_final_cal = models.IntegerField(null=True, blank=True)
    armadura_final_ele = models.IntegerField(null=True, blank=True)
    armadura_final_fri = models.IntegerField(null=True, blank=True)
    armadura_final_ene = models.IntegerField(null=True, blank=True)

    #VENTAJAS Y DESVENTAJAS
    ventajas = models.ManyToManyField(VentajasFijas, null=True, blank=True)
    desventajas = models.ManyToManyField(DesventajasFijas, null=True, blank=True)
    ventajas_prop = models.ManyToManyField(VentajasDependientes, null=True, blank=True)
    desventajas_prop = models.ManyToManyField(DesventajasDependientes, null=True, blank=True)    

    #HABILIDADES SECUNDARIAS
    #atleticas
    coste_atleticas = models.IntegerField(null=True, blank=True)
    coste_acrobacias = models.IntegerField(null=True, blank=True)
    acrobacias_base = models.IntegerField(null=True, blank=True)
    acrobacias_bono = models.IntegerField(null=True, blank=True)
    acrobacias_espe = models.IntegerField(null=True, blank=True)
    acrobacias_cate = models.IntegerField(null=True, blank=True)
    acrobacias_final = models.IntegerField(null=True, blank=True)
    coste_atletismo = models.IntegerField(null=True, blank=True)
    atletismo_base = models.IntegerField(null=True, blank=True)
    atletismo_bono = models.IntegerField(null=True, blank=True)
    atletismo_espe = models.IntegerField(null=True, blank=True)
    atletismo_cate = models.IntegerField(null=True, blank=True)
    atletismo_final = models.IntegerField(null=True, blank=True)
    coste_montar = models.IntegerField(null=True, blank=True)
    montar_base = models.IntegerField(null=True, blank=True)
    montar_bono = models.IntegerField(null=True, blank=True)
    montar_espe = models.IntegerField(null=True, blank=True)
    montar_cate = models.IntegerField(null=True, blank=True)
    montar_final = models.IntegerField(null=True, blank=True)
    coste_nadar = models.IntegerField(null=True, blank=True)
    nadar_base = models.IntegerField(null=True, blank=True)
    nadar_bono = models.IntegerField(null=True, blank=True)
    nadar_espe = models.IntegerField(null=True, blank=True)
    nadar_cate = models.IntegerField(null=True, blank=True)
    nadar_final = models.IntegerField(null=True, blank=True)
    coste_trepar = models.IntegerField(null=True, blank=True)
    trepar_base = models.IntegerField(null=True, blank=True)
    trepar_bono = models.IntegerField(null=True, blank=True)
    trepar_espe = models.IntegerField(null=True, blank=True)
    trepar_cate = models.IntegerField(null=True, blank=True)
    trepar_final = models.IntegerField(null=True, blank=True)
    coste_saltar = models.IntegerField(null=True, blank=True)
    saltar_base = models.IntegerField(null=True, blank=True)
    saltar_bono = models.IntegerField(null=True, blank=True)
    saltar_espe = models.IntegerField(null=True, blank=True)
    saltar_cate = models.IntegerField(null=True, blank=True)
    saltar_final = models.IntegerField(null=True, blank=True)
    #vigor
    coste_vigor = models.IntegerField(null=True, blank=True)
    coste_frialdad = models.IntegerField(null=True, blank=True)
    frialdad_base = models.IntegerField(null=True, blank=True)
    frialdad_bono = models.IntegerField(null=True, blank=True)
    frialdad_espe = models.IntegerField(null=True, blank=True)
    frialdad_cate = models.IntegerField(null=True, blank=True)
    frialdad_final = models.IntegerField(null=True, blank=True)
    coste_pfuerza = models.IntegerField(null=True, blank=True)
    pfuerza_base = models.IntegerField(null=True, blank=True)
    pfuerza_bono = models.IntegerField(null=True, blank=True)
    pfuerza_espe = models.IntegerField(null=True, blank=True)
    pfuerza_cate = models.IntegerField(null=True, blank=True)
    pfuerza_final = models.IntegerField(null=True, blank=True)
    coste_resdolor = models.IntegerField(null=True, blank=True)
    resdolor_base = models.IntegerField(null=True, blank=True)
    resdolor_bono = models.IntegerField(null=True, blank=True)
    resdolor_espe = models.IntegerField(null=True, blank=True)
    resdolor_cate = models.IntegerField(null=True, blank=True)
    resdolor_final = models.IntegerField(null=True, blank=True)
    #perceptivas
    coste_perceptivas = models.IntegerField(null=True, blank=True)
    coste_advertir = models.IntegerField(null=True, blank=True)
    advertir_base = models.IntegerField(null=True, blank=True)
    advertir_bono = models.IntegerField(null=True, blank=True)
    advertir_espe = models.IntegerField(null=True, blank=True)
    advertir_cate = models.IntegerField(null=True, blank=True)
    advertir_final = models.IntegerField(null=True, blank=True)
    coste_buscar = models.IntegerField(null=True, blank=True)
    buscar_base = models.IntegerField(null=True, blank=True)
    buscar_bono = models.IntegerField(null=True, blank=True)
    buscar_espe = models.IntegerField(null=True, blank=True)
    buscar_cate = models.IntegerField(null=True, blank=True)
    buscar_final = models.IntegerField(null=True, blank=True)
    coste_rastrear = models.IntegerField(null=True, blank=True)
    rastrear_base = models.IntegerField(null=True, blank=True)
    rastrear_bono = models.IntegerField(null=True, blank=True)
    rastrear_espe = models.IntegerField(null=True, blank=True)
    rastrear_cate = models.IntegerField(null=True, blank=True)
    rastrear_final = models.IntegerField(null=True, blank=True)
    #intelectuales
    coste_intelectuales = models.IntegerField(null=True, blank=True)
    coste_animales = models.IntegerField(null=True, blank=True)
    animales_base = models.IntegerField(null=True, blank=True)
    animales_bono = models.IntegerField(null=True, blank=True)
    animales_espe = models.IntegerField(null=True, blank=True)
    animales_cate = models.IntegerField(null=True, blank=True)
    animales_final = models.IntegerField(null=True, blank=True)
    coste_ciencia = models.IntegerField(null=True, blank=True)
    ciencia_base = models.IntegerField(null=True, blank=True)
    ciencia_bono = models.IntegerField(null=True, blank=True)
    ciencia_espe = models.IntegerField(null=True, blank=True)
    ciencia_cate = models.IntegerField(null=True, blank=True)
    ciencia_final = models.IntegerField(null=True, blank=True)
    coste_herbolaria = models.IntegerField(null=True, blank=True)
    herbolaria_base = models.IntegerField(null=True, blank=True)
    herbolaria_bono = models.IntegerField(null=True, blank=True)
    herbolaria_espe = models.IntegerField(null=True, blank=True)
    herbolaria_cate = models.IntegerField(null=True, blank=True)
    herbolaria_final = models.IntegerField(null=True, blank=True)
    coste_historia= models.IntegerField(null=True, blank=True)
    historia_base = models.IntegerField(null=True, blank=True)
    historia_bono = models.IntegerField(null=True, blank=True)
    historia_espe = models.IntegerField(null=True, blank=True)
    historia_cate = models.IntegerField(null=True, blank=True)
    historia_final = models.IntegerField(null=True, blank=True)
    coste_medicina = models.IntegerField(null=True, blank=True)
    medicina_base = models.IntegerField(null=True, blank=True)
    medicina_bono = models.IntegerField(null=True, blank=True)
    medicina_espe = models.IntegerField(null=True, blank=True)
    medicina_cate = models.IntegerField(null=True, blank=True)
    medicina_final = models.IntegerField(null=True, blank=True)
    coste_memorizar = models.IntegerField(null=True, blank=True)
    memorizar_base = models.IntegerField(null=True, blank=True)
    memorizar_bono = models.IntegerField(null=True, blank=True)
    memorizar_espe = models.IntegerField(null=True, blank=True)
    memorizar_cate = models.IntegerField(null=True, blank=True)
    memorizar_final = models.IntegerField(null=True, blank=True)
    coste_navegacion = models.IntegerField(null=True, blank=True)
    navegacion_base = models.IntegerField(null=True, blank=True)
    navegacion_bono = models.IntegerField(null=True, blank=True)
    navegacion_espe = models.IntegerField(null=True, blank=True)
    navegacion_cate = models.IntegerField(null=True, blank=True)
    navegacion_final = models.IntegerField(null=True, blank=True)
    coste_ocultismo = models.IntegerField(null=True, blank=True)
    ocultismo_base = models.IntegerField(null=True, blank=True)
    ocultismo_bono = models.IntegerField(null=True, blank=True)
    ocultismo_espe = models.IntegerField(null=True, blank=True)
    ocultismo_cate = models.IntegerField(null=True, blank=True)
    ocultismo_final = models.IntegerField(null=True, blank=True)
    coste_tasacion = models.IntegerField(null=True, blank=True)
    tasacion_base = models.IntegerField(null=True, blank=True)
    tasacion_bono = models.IntegerField(null=True, blank=True)
    tasacion_espe = models.IntegerField(null=True, blank=True)
    tasacion_cate = models.IntegerField(null=True, blank=True)
    tasacion_final = models.IntegerField(null=True, blank=True)
    coste_vmagica = models.IntegerField(null=True, blank=True)
    vmagica_base = models.IntegerField(null=True, blank=True)
    vmagica_bono = models.IntegerField(null=True, blank=True)
    vmagica_espe = models.IntegerField(null=True, blank=True)
    vmagica_cate = models.IntegerField(null=True, blank=True)
    vmagica_final = models.IntegerField(null=True, blank=True)
    #sociales
    coste_sociales = models.IntegerField(null=True, blank=True)
    coste_estilo = models.IntegerField(null=True, blank=True)
    estilo_base = models.IntegerField(null=True, blank=True)
    estilo_bono = models.IntegerField(null=True, blank=True)
    estilo_espe = models.IntegerField(null=True, blank=True)
    estilo_cate = models.IntegerField(null=True, blank=True)
    estilo_final = models.IntegerField(null=True, blank=True)
    coste_intimidar = models.IntegerField(null=True, blank=True)
    intimidar_base = models.IntegerField(null=True, blank=True)
    intimidar_bono = models.IntegerField(null=True, blank=True)
    intimidar_espe = models.IntegerField(null=True, blank=True)
    intimidar_cate = models.IntegerField(null=True, blank=True)
    intimidar_final = models.IntegerField(null=True, blank=True)
    coste_liderazgo = models.IntegerField(null=True, blank=True)
    liderazgo_base = models.IntegerField(null=True, blank=True)
    liderazgo_bono = models.IntegerField(null=True, blank=True)
    liderazgo_espe = models.IntegerField(null=True, blank=True)
    liderazgo_cate = models.IntegerField(null=True, blank=True)
    liderazgo_final = models.IntegerField(null=True, blank=True)
    coste_persuasion = models.IntegerField(null=True, blank=True)
    persuasion_base = models.IntegerField(null=True, blank=True)
    persuasion_bono = models.IntegerField(null=True, blank=True)
    persuasion_espe = models.IntegerField(null=True, blank=True)
    persuasion_cate = models.IntegerField(null=True, blank=True)
    persuasion_final = models.IntegerField(null=True, blank=True)
    #subterfugio
    coste_subterfugio = models.IntegerField(null=True, blank=True)
    coste_cerrajeria = models.IntegerField(null=True, blank=True)
    cerrajeria_base = models.IntegerField(null=True, blank=True)
    cerrajeria_bono = models.IntegerField(null=True, blank=True)
    cerrajeria_espe = models.IntegerField(null=True, blank=True)
    cerrajeria_cate = models.IntegerField(null=True, blank=True)
    cerrajeria_final = models.IntegerField(null=True, blank=True)
    coste_disfraz = models.IntegerField(null=True, blank=True)
    disfraz_base = models.IntegerField(null=True, blank=True)
    disfraz_bono = models.IntegerField(null=True, blank=True)
    disfraz_espe = models.IntegerField(null=True, blank=True)
    disfraz_cate = models.IntegerField(null=True, blank=True)
    disfraz_final = models.IntegerField(null=True, blank=True)
    coste_ocultarse = models.IntegerField(null=True, blank=True)
    ocultarse_base = models.IntegerField(null=True, blank=True)
    ocultarse_bono = models.IntegerField(null=True, blank=True)
    ocultarse_espe = models.IntegerField(null=True, blank=True)
    ocultarse_cate = models.IntegerField(null=True, blank=True)
    ocultarse_final = models.IntegerField(null=True, blank=True)
    coste_robo = models.IntegerField(null=True, blank=True)
    robo_base = models.IntegerField(null=True, blank=True)
    robo_bono = models.IntegerField(null=True, blank=True)
    robo_espe = models.IntegerField(null=True, blank=True)
    robo_cate = models.IntegerField(null=True, blank=True)
    robo_final = models.IntegerField(null=True, blank=True)
    coste_sigilo = models.IntegerField(null=True, blank=True)
    sigilo_base = models.IntegerField(null=True, blank=True)
    sigilo_bono = models.IntegerField(null=True, blank=True)
    sigilo_espe = models.IntegerField(null=True, blank=True)
    sigilo_cate = models.IntegerField(null=True, blank=True)
    sigilo_final = models.IntegerField(null=True, blank=True)
    coste_tramperia = models.IntegerField(null=True, blank=True)
    tramperia_base = models.IntegerField(null=True, blank=True)
    tramperia_bono = models.IntegerField(null=True, blank=True)
    tramperia_espe = models.IntegerField(null=True, blank=True)
    tramperia_cate = models.IntegerField(null=True, blank=True)
    tramperia_final = models.IntegerField(null=True, blank=True)
    coste_venenos = models.IntegerField(null=True, blank=True)
    venenos_base = models.IntegerField(null=True, blank=True)
    venenos_bono = models.IntegerField(null=True, blank=True)
    venenos_espe = models.IntegerField(null=True, blank=True)
    venenos_cate = models.IntegerField(null=True, blank=True)
    venenos_final = models.IntegerField(null=True, blank=True)
    #creativas
    coste_creativas = models.IntegerField(null=True, blank=True)
    coste_arte = models.IntegerField(null=True, blank=True)
    arte_base = models.IntegerField(null=True, blank=True)
    arte_bono = models.IntegerField(null=True, blank=True)
    arte_espe = models.IntegerField(null=True, blank=True)
    arte_cate = models.IntegerField(null=True, blank=True)
    arte_final = models.IntegerField(null=True, blank=True)
    coste_baile = models.IntegerField(null=True, blank=True)
    baile_base = models.IntegerField(null=True, blank=True)
    baile_bono = models.IntegerField(null=True, blank=True)
    baile_espe = models.IntegerField(null=True, blank=True)
    baile_cate = models.IntegerField(null=True, blank=True)
    baile_final = models.IntegerField(null=True, blank=True)
    coste_forja = models.IntegerField(null=True, blank=True)
    forja_base = models.IntegerField(null=True, blank=True)
    forja_bono = models.IntegerField(null=True, blank=True)
    forja_espe = models.IntegerField(null=True, blank=True)
    forja_cate = models.IntegerField(null=True, blank=True)
    forja_final = models.IntegerField(null=True, blank=True)
    coste_musica = models.IntegerField(null=True, blank=True)
    musica_base = models.IntegerField(null=True, blank=True)
    musica_bono = models.IntegerField(null=True, blank=True)
    musica_espe = models.IntegerField(null=True, blank=True)
    musica_cate = models.IntegerField(null=True, blank=True)
    musica_final = models.IntegerField(null=True, blank=True)
    coste_tmanos = models.IntegerField(null=True, blank=True)
    tmanos_base = models.IntegerField(null=True, blank=True)
    tmanos_bono = models.IntegerField(null=True, blank=True)
    tmanos_espe = models.IntegerField(null=True, blank=True)
    tmanos_cate = models.IntegerField(null=True, blank=True)
    tmanos_final = models.IntegerField(null=True, blank=True)
    #especial (hacer algo parecido a lo de las ventajas y desventajas propias)
    #coste_especiales = models.IntegerField(null=True, blank=True)      #Considero q no hace falta este parametro, puesto q se le puede asignar un coste a cada una al ser especiales
    especiales = models.ManyToManyField(HabilidadesSecundariasDependientes, null=True, blank=True)

    #COMBATE
    ataque_coste = models.IntegerField(null=True, blank=True)
    ataque_base = models.IntegerField(null=True, blank=True)
    ataque_destreza = models.IntegerField(null=True, blank=True)
    ataque_categoria = models.IntegerField(null=True, blank=True)
    ataque_final = models.IntegerField(null=True, blank=True)
    
    defensa_coste = models.IntegerField(null=True, blank=True)
    defensa_base = models.IntegerField(null=True, blank=True)
    defensa_destreza = models.IntegerField(null=True, blank=True)
    defensa_categoria = models.IntegerField(null=True, blank=True)
    defensa_final = models.IntegerField(null=True, blank=True)
    
    #ESQUIVA
    esquiva_coste = models.IntegerField(null=True, blank=True)
    esquiva_base = models.IntegerField(null=True, blank=True)
    esquiva_bono_agi = models.IntegerField(null=True, blank=True)
    esquiva_especial = models.IntegerField(null=True, blank=True)
    esquiva_categoria = models.IntegerField(null=True, blank=True)
    esquiva_final = models.IntegerField(null=True, blank=True)
    
    #ARMA
    # Para hacer que cada usuario disponga de una lista de armas para cada personaje en concreto
    #crearemos una tabla "armasYpjs" con una DOBLE clave primaria: "ficha-arma", donde
    #"arma" es una clave externa de la tabla Armas y esta tabla define la posibilidad de q cada
    #usuario se pueda añadir un numero variable de armas!! ^^ OLEEEEE!!
    #CORRECCION: no parece ser tan wena idea...por lo tanto, proseguire con los manytomany por ahora
    armas = models.ManyToManyField(Arma, null=True, blank=True)
    
    #ACUMULACION MAGICA
    acumag_coste = models.IntegerField(null=True, blank=True)
    acumag_act_base = models.IntegerField(null=True, blank=True)
    acumag_multiplos = models.IntegerField(null=True, blank=True)
    acumag_especial = models.IntegerField(null=True, blank=True)
    acumag_act_real = models.IntegerField(null=True, blank=True)
    
    #ZEON
    zeon_coste = models.IntegerField(null=True, blank=True)
    zeon_base = models.IntegerField(null=True, blank=True)
    zeon_categoria = models.IntegerField(null=True, blank=True)
    zeon_especial = models.IntegerField(null=True, blank=True)
    zeon_final = models.IntegerField(null=True, blank=True)
    
    #PROYECCION MAGICA
    proyecmag_coste = models.IntegerField(null=True, blank=True)
    proyecmag_base = models.IntegerField(null=True, blank=True)
    proyecmag_bdes = models.IntegerField(null=True, blank=True)
    proyecmag_especial = models.IntegerField(null=True, blank=True)
    proyecmag_final = models.IntegerField(null=True, blank=True)
    
    #DESEQUILIBRIO
    desequilibrio_ofens = models.IntegerField(null=True, blank=True)
    desequilibrio_defen = models.IntegerField(null=True, blank=True)
    desequilibrio_medio = models.IntegerField(null=True, blank=True)
    
    #POTENCIAL PSIQUICO
    potenpsiq_base = models.IntegerField(null=True, blank=True)
    potenpsiq_especial = models.IntegerField(null=True, blank=True)
    potenpsiq_final = models.IntegerField(null=True, blank=True)
    
    #CV
    cv_coste = models.IntegerField(null=True, blank=True)
    cv_base = models.IntegerField(null=True, blank=True)
    cv_libres = models.IntegerField(null=True, blank=True)
    
    #PROYECCION PSIQUICA
    proyecpsiq_coste = models.IntegerField(null=True, blank=True)
    proyecpsiq_base = models.IntegerField(null=True, blank=True)
    proyecpsiq_bdes = models.IntegerField(null=True, blank=True)
    proyecpsiq_especial = models.IntegerField(null=True, blank=True)
    proyecpsiq_final = models.IntegerField(null=True, blank=True)

    #NIVEL DE ESFERA
    esfera_esencia = models.IntegerField(null=True, blank=True)
    esfera_agua = models.IntegerField(null=True, blank=True)
    esfera_tierra = models.IntegerField(null=True, blank=True)
    esfera_creacion = models.IntegerField(null=True, blank=True)
    esfera_oscuridad = models.IntegerField(null=True, blank=True)
    esfera_nigromancia = models.IntegerField(null=True, blank=True)
    esfera_luz = models.IntegerField(null=True, blank=True)
    esfera_destruccion = models.IntegerField(null=True, blank=True)
    esfera_aire = models.IntegerField(null=True, blank=True)
    esfera_fuego = models.IntegerField(null=True, blank=True)
    esfera_ilusion = models.IntegerField(null=True, blank=True)
    
    #DISCIPLINAS PSIQUICAS
    disciplinas_psiquicas = models.ManyToManyField(DisciplinasPsiquicas, null=True, blank=True)
    
    #HABILIDADES PSIQUICAS
    habpsiq = models.ManyToManyField(HabilidadesPsiquicas, null=True, blank=True)
    habpsiq_num_innatos = models.IntegerField(null=True, blank=True)
    
    #USO DEL KI (en la tabla de ki, establecer un campo "dependencia" donde se establezca que campo tiene que tener un valor mayor q cero (si hiciera falta) para que el campo en cuestion pueda tenerse)
    ki_uso = models.ManyToManyField(HabilidadesKi, null=True, blank=True)
    ki_cmarcial = models.IntegerField(null=True, blank=True)
    ki_usado = models.IntegerField(null=True, blank=True)
    
    #acumulaciones de ki a los atributos (?)
    ki_fue_acu = models.IntegerField(null=True, blank=True)
    ki_fue_ki = models.IntegerField(null=True, blank=True)
    ki_fue_actual = models.IntegerField(null=True, blank=True)
    ki_agi_acu = models.IntegerField(null=True, blank=True)
    ki_agi_ki = models.IntegerField(null=True, blank=True)
    ki_agi_actual = models.IntegerField(null=True, blank=True)
    ki_des_acu = models.IntegerField(null=True, blank=True)
    ki_des_ki = models.IntegerField(null=True, blank=True)
    ki_des_actual = models.IntegerField(null=True, blank=True)
    ki_con_acu = models.IntegerField(null=True, blank=True)
    ki_con_ki = models.IntegerField(null=True, blank=True)
    ki_con_actual = models.IntegerField(null=True, blank=True)
    ki_vol_acu = models.IntegerField(null=True, blank=True)
    ki_vol_ki = models.IntegerField(null=True, blank=True)
    ki_vol_actual = models.IntegerField(null=True, blank=True)
    ki_pod_acu = models.IntegerField(null=True, blank=True)
    ki_pod_ki = models.IntegerField(null=True, blank=True)
    ki_pod_actual = models.IntegerField(null=True, blank=True)
    
    #RESISTENCIAS
    res_presenbase_base = models.IntegerField(null=True, blank=True)
    res_presenbase_esp = models.IntegerField(null=True, blank=True)
    res_presenbase_final = models.IntegerField(null=True, blank=True)
    res_fisica_base = models.IntegerField(null=True, blank=True)
    res_fisica_bono = models.IntegerField(null=True, blank=True)
    res_fisica_esp = models.IntegerField(null=True, blank=True)
    res_fisica_final = models.IntegerField(null=True, blank=True)
    res_enfermedades_base = models.IntegerField(null=True, blank=True)
    res_enfermedades_bono = models.IntegerField(null=True, blank=True)
    res_enfermedades_esp = models.IntegerField(null=True, blank=True)
    res_enfermedades_final = models.IntegerField(null=True, blank=True)
    res_venenos_base = models.IntegerField(null=True, blank=True)
    res_venenos_bono = models.IntegerField(null=True, blank=True)
    res_venenos_esp = models.IntegerField(null=True, blank=True)
    res_venenos_final = models.IntegerField(null=True, blank=True)
    res_magicas_base = models.IntegerField(null=True, blank=True)
    res_magicas_bono = models.IntegerField(null=True, blank=True)
    res_magicas_esp = models.IntegerField(null=True, blank=True)
    res_magicas_final = models.IntegerField(null=True, blank=True)
    res_psiquica_base = models.IntegerField(null=True, blank=True)
    res_psiquica_bono = models.IntegerField(null=True, blank=True)
    res_psiquica_esp = models.IntegerField(null=True, blank=True)
    res_psiquica_final = models.IntegerField(null=True, blank=True)
    
    #HABILIDADES ESPECIALES / TABLAS
    habilidades_especiales = models.ManyToManyField(HabilidadesEspeciales, null=True, blank=True)
    tablas = models.ManyToManyField(Tablas, null=True, blank=True)
    
    #TECNICAS
    tecnicasfijas = models.ManyToManyField(TecnicasFijas, null=True, blank=True)
    tecnicasdependientes = models.ManyToManyField(TecnicasDependientes, null=True, blank=True)
    
    #CONVOCACION
    conv_convocar_base = models.IntegerField(null=True, blank=True)
    conv_convocar_bono = models.IntegerField(null=True, blank=True)
    conv_convocar_esp = models.IntegerField(null=True, blank=True)
    conv_convocar_final = models.IntegerField(null=True, blank=True)
    conv_dominacion_base = models.IntegerField(null=True, blank=True)
    conv_dominacion_bono = models.IntegerField(null=True, blank=True)
    conv_dominacion_esp = models.IntegerField(null=True, blank=True)
    conv_dominacion_final = models.IntegerField(null=True, blank=True)
    conv_atadura_base = models.IntegerField(null=True, blank=True)
    conv_atadura_bono = models.IntegerField(null=True, blank=True)
    conv_atadura_esp = models.IntegerField(null=True, blank=True)
    conv_atadura_final = models.IntegerField(null=True, blank=True)
    conv_desconvocar_base = models.IntegerField(null=True, blank=True)
    conv_desconvocar_bono = models.IntegerField(null=True, blank=True)
    conv_desconvocar_esp = models.IntegerField(null=True, blank=True)
    conv_desconvocar_final = models.IntegerField(null=True, blank=True)
    conv_especializacion = models.IntegerField(null=True, blank=True)
    
    #ARTES MARCIALES
    artes_marciales = models.ManyToManyField(ArtesMarciales, null=True, blank=True)
    artmar_cmtotal = models.IntegerField(null=True, blank=True)
    artmar_bataq = models.IntegerField(null=True, blank=True)
    artmar_bdef = models.IntegerField(null=True, blank=True)
    artmar_danio = models.IntegerField(null=True, blank=True)
    
    #EQUIPO
    equipo_combate = models.ManyToManyField(EquipoCombate, null=True, blank=True)
    equipo_vestimenta = models.ManyToManyField(EquipoVestimenta, null=True, blank=True)
    equipo_posesiones = models.ManyToManyField(EquipoPosesiones, null=True, blank=True)
    equipo_variado = models.ManyToManyField(EquipoVariado, null=True, blank=True)
    equipo_objesp = models.ManyToManyField(EquipoObjEsp, null=True, blank=True)
    contactos = models.ManyToManyField(Contactos, null=True, blank=True)
    
    notas = models.ManyToManyField(Notas, null=True, blank=True)
    
    #DINERO
    dinero_oro_coste = models.IntegerField(null=True, blank=True)
    dinero_oro_cantidad = models.IntegerField(null=True, blank=True)
    dinero_plata_coste = models.IntegerField(null=True, blank=True)
    dinero_plata_cantidad = models.IntegerField(null=True, blank=True)
    dinero_bronce_coste = models.IntegerField(null=True, blank=True)
    dinero_bronce_cantidad = models.IntegerField(null=True, blank=True)
    dinero_joyas_coste = models.IntegerField(null=True, blank=True)
    dinero_joyas_cantidad = models.IntegerField(null=True, blank=True)
    dinero_otros_nombre = models.CharField(max_length=40)
    dinero_otros_coste = models.IntegerField(null=True, blank=True)
    dinero_otros_cantidad = models.IntegerField(null=True, blank=True)
    
    #RACIONES DIARIAS
    raciones_comida = models.CharField(max_length=40)
    raciones_bebida = models.CharField(max_length=40)
    raciones_otros = models.CharField(max_length=100)
    
    #PROYECTILES
    proyectiles_flechas = models.CharField(max_length=40)
    proyectiles_saetas = models.CharField(max_length=40)
    proyectiles_dagas = models.CharField(max_length=40)
    
    #TODO: FALTA LA CUARTA PAGINA
    
    #def __unicode__(self):
    #    return self.personaje
    
    class Meta:
        unique_together=[['propietario','personaje']]
